package com.ljy.my_study.leetcode.括号生成;

import java.util.ArrayList;
import java.util.List;

/** 
* @author James
* @date 2018年9月16日 
*/
public class TestMain {
//	给出 n 代表生成括号的对数，请你写出一个函数，使其能够生成所有可能的并且有效的括号组合。
//
//	例如，给出 n = 3，生成结果为：
//			[
//			  "((()))",
//			  "(()())",
//			  "(())()",
//			  "()(())",
//			  "()()()"
//			]
	
	public static void main(String[] args) {
//		createBrackets(4);
		
		TestMain testMain=new TestMain();
		List<String> result=testMain.generateParenthesis(12);
		result.forEach(s->{
			System.out.println(s);
		});
	}
	
	public List<String> generateParenthesis(int n) {
        List<String> ans = new ArrayList();
        backtrack(ans, "", 0, 0, n);
        return ans;
    }

    public void backtrack(List<String> ans, String cur, int open, int close, int max){
        if (cur.length() == max * 2) {
            ans.add(cur);
            return;
        }

        if (open < max)
            backtrack(ans, cur+"(", open+1, close, max);
        if (close < open)
            backtrack(ans, cur+")", open, close+1, max);
    }
	
	public static String[] createBrackets(int n) {
		int length=(int) Math.pow(n,2*n);
		String[] arr=new String[length];
		System.out.println(length);
		return null;
	}
}
